package org.example.study1;

// 多线程资源共享与任务分离
public class Demo04_Runnable {
    public static void main(String[] args) {
        // 实例化任务对象，创建两个不同类型的任务实例，
        MyRunnable02 myRunnable02 = new MyRunnable02();  // 短袖生产任务
        MyRunnable03 myRunnable03 = new MyRunnable03();  // 短裤生产任务


        /**
         * 线程创建：
         * thread01与thread02共享myRunnable02实例
         * 潜在问题：
         * - 若任务包含状态需要同步（如计数器）
         * - 相同任务并行可能导致资源竞争
         *
         * thread03使用独立任务实例
         * 特点：
         * - 完全独立的任务执行环境
         * - 无资源共享问题
         */
        // 线程需要什么任务就传对应的runnable即可
        Thread thread01 = new Thread(myRunnable02); // 短袖生产线1
        Thread thread02 = new Thread(myRunnable02); // 短袖生产线2（共享任务）
        Thread thread03 = new Thread(myRunnable03); // 短裤生产线（独立任务）

        // 启动线程，开始生产
        thread01.start();  //
        thread02.start();  // 两个短袖线程并行
        thread03.start();  // 短裤线程独立运行

        // 注意：主线程结束后，这三个用户线程仍会继续运行
    }
}

/**
 * 短袖生产任务类（高价值产品）
 * 设计特点：
 * - 无状态任务（适合多线程共享）
 */
class MyRunnable02 implements Runnable {
    /**
     * 生产流程实现
     * 注意：
     * - 多个线程共享此实例时，局部变量是线程安全的
     * - 若添加实例变量（如totalProduced）需要同步处理
     */
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("生产短袖，33块钱....");
        }
    }
}



/**
 * 短裤生产任务类（低价值产品）
 * 设计差异：
 * - 独立的任务逻辑
 */
class MyRunnable03 implements Runnable {
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("生产短裤，50块钱....");

        }
    }
}

/*输出同样是不规律的
生产短袖，33块钱....
生产短袖，33块钱....
生产短裤，50块钱....
生产短袖，33块钱....
生产短袖，33块钱....
生产短裤，50块钱....
生产短袖，33块钱....
生产短裤，50块钱....
生产短袖，33块钱....
生产短袖，33块钱....
生产短裤，50块钱....
......*/